import { useUserStore } from '~/store/useUser'

/**
 * 认证相关的组合式函数
 * 提供统一的认证检查和权限验证方法
 */
export const useAuth = () => {
  const userStore = useUserStore()
  const router = useRouter()

  /**
   * 检查用户是否已登录
   * @returns {boolean} 登录状态
   */
  const isAuthenticated = (): boolean => {
    return userStore.isLogin
  }

  /**
   * 检查用户是否有有效的token
   * @returns {boolean} token有效性
   */
  const hasValidToken = (): boolean => {
    const token = userStore.getToken
    return !!token
  }

  /**
   * 获取当前用户信息
   * @returns {object} 用户信息对象
   */
  const getCurrentUser = () => {
    return userStore.getUserInfo
  }

  /**
   * 检查用户类型
   * @param {string} userType - 要检查的用户类型
   * @returns {boolean} 是否匹配指定用户类型
   */
  const checkUserType = (userType: string): boolean => {
    const userInfo = getCurrentUser()
    return userInfo?.userType === userType
  }

  /**
   * 检查用户是否为买家
   * @returns {boolean} 是否为买家
   */
  const isBuyer = (): boolean => {
    return checkUserType('buyer')
  }

  /**
   * 检查用户是否为卖家
   * @returns {boolean} 是否为卖家
   */
  const isSeller = (): boolean => {
    return checkUserType('seller')
  }

  /**
   * 检查用户是否有公司信息
   * @returns {boolean} 是否有公司信息
   */
  const hasCompany = (): boolean => {
    const userInfo = getCurrentUser()
    return !!(userInfo?.companyId && userInfo?.companyName)
  }

  /**
   * 要求用户登录
   * 如果用户未登录，显示提示并跳转到登录页
   * @param {string} message - 自定义提示消息
   * @returns {boolean} 是否已登录
   */
  const requireAuth = (message: string = '请先登录'): boolean => {
    if (!isAuthenticated()) {
      ElMessage.warning(message)
      router.push('/login')
      return false
    }
    return true
  }

  /**
   * 要求特定用户类型
   * @param {string} userType - 要求的用户类型
   * @param {string} message - 自定义提示消息
   * @returns {boolean} 是否满足用户类型要求
   */
  const requireUserType = (userType: string, message?: string): boolean => {
    if (!requireAuth()) {
      return false
    }
    
    if (!checkUserType(userType)) {
      const defaultMessage = userType === 'seller' ? '此功能仅限卖家使用' : '此功能仅限买家使用'
      ElMessage.warning(message || defaultMessage)
      return false
    }
    
    return true
  }

  /**
   * 要求买家权限
   * @param {string} message - 自定义提示消息
   * @returns {boolean} 是否为买家
   */
  const requireBuyer = (message?: string): boolean => {
    return requireUserType('buyer', message)
  }

  /**
   * 要求卖家权限
   * @param {string} message - 自定义提示消息
   * @returns {boolean} 是否为卖家
   */
  const requireSeller = (message?: string): boolean => {
    return requireUserType('seller', message)
  }

  /**
   * 要求公司信息
   * @param {string} message - 自定义提示消息
   * @returns {boolean} 是否有公司信息
   */
  const requireCompany = (message: string = '请先完善公司信息'): boolean => {
    if (!requireAuth()) {
      return false
    }
    
    if (!hasCompany()) {
      ElMessage.warning(message)
      return false
    }
    
    return true
  }

  /**
   * 安全退出登录
   * @returns {Promise<void>}
   */
  const logout = async (): Promise<void> => {
    try {
      await userStore.logout()
      router.push('/login')
    } catch (error) {
      console.error('退出登录失败:', error)
      // 即使退出失败，也清理本地状态并跳转
      router.push('/login')
    }
  }

  /**
   * 刷新用户信息
   * @returns {Promise<any>}
   */
  const refreshUserInfo = async () => {
    try {
      return await userStore.userInfoAction()
    } catch (error) {
      console.error('刷新用户信息失败:', error)
      throw error
    }
  }

  return {
    // 状态检查
    isAuthenticated,
    hasValidToken,
    getCurrentUser,
    checkUserType,
    isBuyer,
    isSeller,
    hasCompany,
    
    // 权限要求
    requireAuth,
    requireUserType,
    requireBuyer,
    requireSeller,
    requireCompany,
    
    // 操作方法
    logout,
    refreshUserInfo
  }
}